Objetivo: realizar estadísticas espacio-temporales básicas utilizando datos grillados y vectoriales.
Comencemos con algunas estadísticas ráster básicas. Para esto, necesitamos cargar el paquete terra en R:
Por favor, cargue el siguiente ráster de temperaturas promedio mensuales globales para el mes de febrero.
Nota: los datos se proporcionan en grados Celsius.
Empecemos por mirar los datos:
Podemos extraer los valores mínimos y máximos de un ráster:
Si solo queremos verificar los valores mínimos y máximos (es decir, no guardar el número ni usarlo en un cálculo), los valores aparecen cuando escribimos el nombre del objeto y presionamos enter.
temp_feb
## class : SpatRaster
## dimensions : 4320, 8640, 1 (nrow, ncol, nlyr)
## resolution : 0.04166667, 0.04166667 (x, y)
## extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : wc2.1_2.5m_tavg_02.tif
## name : wc2.1_2.5m_tavg_02
## min value : -44.80
## max value : 32.96Para averiguar el número de celdas que tienen un cierto valor, podemos usar la función freq.
x: capa ráster
digits: se utiliza para redondear los valores de las celdas
value: valor opcional. Cuenta solo las celdas con este valor
Si no especificamos un valor o una condición de redondeo:
freq(temp_feb)
## layer value count
## 1 1 -45 17478
## 2 1 -44 83878
## 3 1 -43 117982
## 4 1 -42 102845
## 5 1 -41 106076
## 6 1 -40 152928
## 7 1 -39 154018
## 8 1 -38 151494
## 9 1 -37 226850
## 10 1 -36 213282
## 11 1 -35 232837
## 12 1 -34 293376
## 13 1 -33 273896
## 14 1 -32 275022
## 15 1 -31 241752
## 16 1 -30 213349
## 17 1 -29 250686
## 18 1 -28 211607
## 19 1 -27 203796
## 20 1 -26 198331
## 21 1 -25 219682
## 22 1 -24 205186
## 23 1 -23 215089
## 24 1 -22 186505
## 25 1 -21 182648
## 26 1 -20 197982
## 27 1 -19 194459
## 28 1 -18 210066
## 29 1 -17 241606
## 30 1 -16 259705
## 31 1 -15 223245
## 32 1 -14 209189
## 33 1 -13 211503
## 34 1 -12 191229
## 35 1 -11 157554
## 36 1 -10 149361
## 37 1 -9 136770
## 38 1 -8 130283
## 39 1 -7 125210
## 40 1 -6 121743
## 41 1 -5 110963
## 42 1 -4 109459
## 43 1 -3 116599
## 44 1 -2 111883
## 45 1 -1 94808
## 46 1 0 117162
## 47 1 1 94409
## 48 1 2 84865
## 49 1 3 77204
## 50 1 4 84120
## 51 1 5 83697
## 52 1 6 80351
## 53 1 7 74984
## 54 1 8 72369
## 55 1 9 73109
## 56 1 10 73799
## 57 1 11 67978
## 58 1 12 84051
## 59 1 13 101461
## 60 1 14 119884
## 61 1 15 110814
## 62 1 16 88892
## 63 1 17 85445
## 64 1 18 104649
## 65 1 19 121411
## 66 1 20 140826
## 67 1 21 172560
## 68 1 22 214183
## 69 1 23 237690
## 70 1 24 287524
## 71 1 25 399249
## 72 1 26 463549
## 73 1 27 335760
## 74 1 28 192903
## 75 1 29 104746
## 76 1 30 82156
## 77 1 31 50880
## 78 1 32 15303
## 79 1 33 419Ahora, vamos a buscar solo las celdas con NA:
Ahora, busquemos el valor 20 grados, pero dentro de un margen de redondeo de 0.1 (ten en cuenta que esto significa que solo se incluyen los valores de 19.95 a 20.05).
Utilicemos lo que acabamos de aprender para exportar una serie temporal de la temperatura media mensual global durante los 12 meses para los que tenemos datos (sobre áreas terrestres, ya que los océanos se almacenan como NA).
Comencemos cargando los rásters y creando un stack con las 12 capas:
Ahora queremos calcular el valor medio en cada capa:
mean_values <- global(t_stack, stat = mean, na.rm = TRUE)
print(mean_values)
## mean
## wc2.1_2.5m_tavg_01 -6.9901310
## wc2.1_2.5m_tavg_02 -8.2640013
## wc2.1_2.5m_tavg_03 -8.4594775
## wc2.1_2.5m_tavg_04 -6.3245406
## wc2.1_2.5m_tavg_05 -3.3703036
## wc2.1_2.5m_tavg_06 -0.6429807
## wc2.1_2.5m_tavg_07 0.1324651
## wc2.1_2.5m_tavg_08 -0.6111403
## wc2.1_2.5m_tavg_09 -2.2624299
## wc2.1_2.5m_tavg_10 -4.0777166
## wc2.1_2.5m_tavg_11 -5.3751544
## wc2.1_2.5m_tavg_12 -5.8202356Veamos los resultados.
plot(1:12, mean_values$mean, type = "l", xaxt = "n", xlab = "Month", ylab = "Temp [deg. C]")
axis(1, 1:12, month.abb)xaxt = “n” es para excluir las etiquetas en el eje x. Esto se debe a que queremos agregar las abreviaturas de los meses (vea la siguiente línea) en lugar de un valor predeterminado de 1 a 12.
month.abb es un objeto predefinido en R que tiene las abreviaturas de cada mes.
Finalmente, queremos exportar estos valores como una serie temporal.
Acabamos de mostrar cómo calcular el valor medio (u otra variable) para cada paso de tiempo. Luego, generamos una serie temporal para los 12 meses – con un valor para cada mes –.
Ahora queremos calcular la temperatura media anual en cada celda de la grilla. Calcularemos para cada celda la media de los 12 valores que corresponden a los 12 meses.
Utilizaremos los mismos datos de temperatura que utilizamos en el ejemplo anterior. Esta vez, en lugar de global, podemos utilizar la función mean.
A veces es útil visualizar la ubicación de los valores NA en un archivo ráster. Para este propósito, podemos usar el parámetro colNA de la función plot.
Para este ejercicio, queremos analizar los patrones de precipitación y evapotranspiración en Uganda. Tenemos los siguientes datos:
Queremos generar un gráfico de línea para la media mensual de P y la media mensual de Ea en Uganda.
Paso 1: Cargar los paquetes necesarios en R.
Paso 2: Establecer las rutas para el shapefile y las carpetas con los datos de CHIRPS y SSEBop.
Paso 3: Leer el shapefile y extraer el polígono correspondiente a Uganda.
Paso 4: Cree un stack de los archivos mensuales de CHIRPS.
chirps_files <- list.files(chirps_path, full.names = TRUE)
chirps <- rast(chirps_files)
plot(chirps)Queremos calcular la media mensual de precipitación sobre Uganda. Eso significa que solo queremos calcular estadísticas ráster dentro de este shapefile. ¿Cuál la forma de hacer esto?
Enmáscar el ráster con el shapefile (¡no recortar!)
Calcular las estadísticas utilizando este ráster enmascarado
Pero, si buscamos otras opciones, podemos ver que existe una función que ya realiza este proceso por nosotros: la función extract (en el paquete terra).
Paso 5: Extraiga el promedio mensual de P sobre Uganda.
Podemos ver que nuestra salida está almacenada como una matriz. El primer valor debe ser eliminado.
print(ug_pmean)
## ID chirps_monthly2018.01 chirps_monthly2018.02 chirps_monthly2018.03
## 1 1 21.60957 46.26966 171.186
## chirps_monthly2018.04 chirps_monthly2018.05 chirps_monthly2018.06
## 1 227.9121 187.1596 125.8768
## chirps_monthly2018.07 chirps_monthly2018.08 chirps_monthly2018.09
## 1 62.84645 134.0909 103.6331
## chirps_monthly2018.10 chirps_monthly2018.11 chirps_monthly2018.12
## 1 126.2652 86.03881 99.42722Convirtamos la salida en un vector numérico para que sea más fácil de manejar.
Paso 6: Repita el mismo proceso para los datos de Ea: primero hay que crear un ráster stack y después extraer el promedio mensual de Ea.
Paso 7: Cree un gráfico de líneas para el promedio mensual de P y Ea sobre Uganda.
Primero, comenzamos graficando solo el promedio mensual de P:
plot(1:12, ug_pmean, type = "l", main = "Promedio mensual de P y Ea para Uganda - 2018",
col = "blue", lwd = 2, xlab = "Mes", ylab = "P y Ea [mm]", xaxt = "n")Luego, podemos agregar el Ea usando el comando lines.
Finalmente, podemos incluir las abreviaturas de los meses en el eje x, las líneas de la cuadrícula y una leyenda.
Para este ejercicio, generaremos tres salidas más:
Boxplot de la evaporación mensual en Uganda
Distribución espacial de la precipitación anual acumulada menos la evaporación en Uganda
Histograma de los valores de la precipitación anual acumulada menos evaporación en Uganda
Para poder completar nuestros tres objetivos adicionales, queremos crear rásters de P y Ea mensuales enmascarados para Uganda.
Use la función mask para generar los rásters de P y Ea mensuales.
Generar un boxplot para mostrar la dispersión de los valores de Ea para cada mes.
boxplot(uganda_ea, main = "Evaporación mensual en Uganda - 2018", col = "red", xlab = "Mes", ylab = "Ea [mm]", xaxt = "n")
axis(1, 1:12, month.abb)
grid()Para calcular P menos Ea para 2018, primero debemos calcular la precipitación y la evaporación anuales acumuladas para Uganda.
Generar rásters para la precipitación y la evaporación anuales acumuladas:
Remuestrear el ráster de P a la misma resolución espacial que el ráster de Ea.
Calcular la precipitación anual acumulada menos la evaporación en Uganda.
Realizar un histograma de la distribución de los valores de la precipitación anual acumulada menos la evaporación.
Recuerda, si te sientes mejor graficando shapefiles y rásters utilizando otro programa (por ejemplo, ArgGIS, QGIS, Google Earth Engine), esto aún puede hacerse fácilmente. Solo recuerda que primero debes guardar tus resultados (es decir, exportar los datos).